package com.example.lettcode._202411._20241127;

/*
598. 区间加法 II
给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时， M[x][y] 应该加 1。
在 执行完所有操作后 ，计算并返回 矩阵中最大整数的个数 。

示例 1:
输入: m = 3, n = 3，ops = [[2,2],[3,3]]
输出: 4
解释: M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。

示例 2:
输入: m = 3, n = 3, ops = [[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3]]
输出: 4

示例 3:
输入: m = 3, n = 3, ops = []
输出: 9


提示:
1 <= m, n <= 4 * 104
0 <= ops.length <= 104
ops[i].length == 2
1 <= ai <= m
1 <= bi <= n


示例 1:
输入: m = 3, n = 3，ops = [[2,2],[3,3],[3,3]]
输出: 4

示例解释：
存在3*3的矩阵
第一步[2,2]：
    在该矩阵2*2的范围内，每个位置都+1
第二步[3,3]：
    在该矩阵的3*3范围内，每个位置都+1
第三步[3,3]：
     在该矩阵的3*3范围内，每个位置+1

因为只计算最大值的个数，所以只需要求出最小的交集即可，即行和列的最小值
 */
public class _01_qu_jian_jia_fa_2 {

    public static void main(String[] args) {
        int m = 3, n = 3;
        int[][] ops = {{2,2},{3,3},{3,3}};
        System.out.println(maxCount(m, n, ops));
    }

    public static int maxCount(int m, int n, int[][] ops) {
        int mina = m, minb = n;
        for (int[] op : ops) {
            mina = Math.min(mina, op[0]);
            minb = Math.min(minb, op[1]);
        }
        return mina * minb;
    }
}
